home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / workbench werkzeuge / memory & system tools / tinymeter / source / tinymeter_prefs / main.c < prev    next >
C/C++ Source or Header  |  1996-04-07  |  81KB  |  2,152 lines

  1. /// headers
  2. /* MUI */
  3. #include <libraries/mui.h>
  4.  
  5. /* System */
  6. #include <dos/dos.h>
  7. #include <graphics/gfxmacros.h>
  8. #include <workbench/workbench.h>
  9. #include <exec/memory.h>
  10. #include <datatypes/pictureclass.h>
  11. #include <libraries/locale.h>
  12.  
  13. /* Prototypes */
  14. #include <clib/alib_protos.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/dos_protos.h>
  17. #include <clib/icon_protos.h>
  18. #include <clib/graphics_protos.h>
  19. #include <clib/intuition_protos.h>
  20. #include <clib/gadtools_protos.h>
  21. #include <clib/utility_protos.h>
  22. #include <clib/asl_protos.h>
  23.  
  24. #ifndef __GNUC__
  25. #include <clib/muimaster_protos.h>
  26. #else
  27. #include <inline/muimaster.h>
  28. #endif
  29.  
  30. /* ANSI C */
  31. #include <stdlib.h>
  32. #include <string.h>
  33. #include <stdio.h>
  34.  
  35. #ifndef MAKE_ID
  36. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  37. #endif
  38.  
  39. ///
  40. #define  STRINGARRAY YES
  41. #include "TinyMeterPrefs.lh"
  42. #include "tinymeter.h"
  43.  
  44. static struct MUI_CustomClass *CL_FieldsList;
  45. static struct MUI_CustomClass *CL_ChooseFields;
  46. static struct MUI_CustomClass *CL_MainWindow;
  47. static struct MUI_CustomClass *CL_Composer;
  48.  
  49. #define USE_ABOUT_COLORS   YES
  50. #define USE_ABOUT_HEADER   YES
  51. #define USE_ABOUT_BODY     YES
  52.  
  53. #define USE_QUESTION_COLORS   YES
  54. #define USE_QUESTION_HEADER   YES
  55. #define USE_QUESTION_BODY     YES
  56.  
  57.  
  58. enum { MEN_PROJECT=1,MEN_ABOUT,MEN_OPEN,MEN_SAVE,MEN_QUIT,CMP_LOAD, CMP_SAVE, CMP_CANCEL, CMP_PROJECT };
  59.  
  60. ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg);
  61.  
  62. /*************************************************************************************************/
  63. /* misc funcs                                                                                    */
  64. /*************************************************************************************************/
  65. ///
  66. ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...)
  67. {
  68.         return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL));
  69. }
  70.  
  71. LONG xget(Object *obj,ULONG attribute)
  72. {
  73.     LONG x;
  74.     get(obj,attribute,&x);
  75.     return(x);
  76. }
  77.  
  78. initColor(struct GAU_Color *col,Object *obj)
  79. {
  80.     struct MUI_PenSpec pspec;
  81.  
  82.     if(col->pen==TRUE)
  83.     {
  84.         sprintf(&pspec.buf[0],"p%d\0",col->red);
  85.         set(obj,MUIA_Pendisplay_Spec,&pspec);
  86.     }
  87.     else
  88.     {
  89.         sprintf(&pspec.buf[0],"r%08lx,%08lx,%08lx\0",col->red,col->green,col->blue);
  90.         set(obj,MUIA_Pendisplay_Spec,&pspec);
  91.     }
  92. }
  93.  
  94. ULONG convertColor(char *colstr)
  95. {
  96. }
  97.  
  98.  
  99. getColor(struct GAU_Color *col,Object *obj)
  100. {
  101.     struct MUI_PenSpec  *pspec;
  102.     char                *buf;
  103.     ULONG               *dummy1,dummy2,dummy3;
  104.  
  105.  
  106.     get(obj,MUIA_Pendisplay_Spec,&pspec);
  107.     if(buf=(char *)AllocVec(256L,MEMF_CLEAR))
  108.     {
  109.         strcpy(buf,&pspec->buf[0]);
  110.         if(buf[0])
  111.         {
  112.             switch (buf[0])
  113.             {
  114.                 case    'r':
  115.                         col->pen=(UWORD)FALSE;
  116.                         sscanf(buf+1,"%lx,%lx,%lx",&dummy1,&dummy2,&dummy3);
  117.                         col->red=(ULONG)dummy1;
  118.                         col->green=(ULONG)dummy2;
  119.                         col->blue=(ULONG)dummy3;
  120.                         break;
  121.                 case    'p':
  122.                         col->pen=(UWORD)TRUE;
  123.                         sscanf(buf+1,"%ld",&col->red);
  124.                         break;
  125.                 case    'm':
  126.                         MUI_RequestA(NULL,NULL,0,"TinyMeterPrefs","BAD LUCK!","Please do not use MUI colors.\nThey are not supported by TinyMeter!\n\nUse Colormap or a RBG color instead.",NULL);
  127.                         break;
  128.             }
  129.         }
  130.         FreeVec(buf);
  131.     }
  132. }
  133.  
  134. __saveds __asm void IntuiMsgFunc(__a1 struct IntuiMessage *imsg,__a2 struct FileRequester *req)
  135. {
  136.         if (imsg->Class==IDCMP_REFRESHWINDOW)
  137.                 DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh);
  138. }
  139.  
  140. char *getfilename(Object *win,char *title,char *pattern,BOOL save)
  141. {
  142.         static char buf[512];
  143.         struct FileRequester *req;
  144.         struct Window *w;
  145.         static LONG left=-1,top=-1,width=-1,height=-1;
  146.         Object *app = (Object *)xget(win,MUIA_ApplicationObject);
  147.         char *res = NULL;
  148.         static const struct Hook IntuiMsgHook = { { 0,0 },(VOID *)IntuiMsgFunc,NULL,NULL };
  149.  
  150.         get(win,MUIA_Window_Window,&w);
  151.         if (left==-1)
  152.         {
  153.                 left   = w->LeftEdge+w->BorderLeft+2;
  154.                 top    = w->TopEdge+w->BorderTop+2;
  155.                 width  = w->Width-w->BorderLeft-w->BorderRight-4;
  156.                 height = w->Height-w->BorderTop-w->BorderBottom-4;
  157.         }
  158.  
  159.         if (req=MUI_AllocAslRequestTags(ASL_FileRequest,
  160.                 ASLFR_Window, w,
  161.                 ASLFR_TitleText, title,
  162.                 ASLFR_InitialLeftEdge, left,
  163.                 ASLFR_InitialTopEdge , top,
  164.                 ASLFR_InitialWidth   , width,
  165.                 ASLFR_InitialHeight  , height,
  166.                 ASLFR_InitialPattern , pattern,
  167.                 ASLFR_DoSaveMode     , save,
  168.                 ASLFR_DoPatterns     , TRUE,
  169.                 ASLFR_RejectIcons    , TRUE,
  170.                 ASLFR_UserData       , app,
  171.                 ASLFR_IntuiMsgFunc   , &IntuiMsgHook,
  172.                 TAG_DONE))
  173.         {
  174.                 set(app,MUIA_Application_Sleep,TRUE);
  175.                 if (MUI_AslRequestTags(req,TAG_DONE))
  176.                 {
  177.                         if (*req->fr_File)
  178.                         {
  179.                                 res = buf;
  180.                                 strcpy(buf,req->fr_Drawer);
  181.                                 AddPart(buf,req->fr_File,sizeof(buf));
  182.                         }
  183.                         left   = req->fr_LeftEdge;
  184.                         top    = req->fr_TopEdge;
  185.                         width  = req->fr_Width;
  186.                         height = req->fr_Height;
  187.                 }
  188.                 MUI_FreeAslRequest(req);
  189.                 set(app,MUIA_Application_Sleep,FALSE);
  190.         }
  191.         return(res);
  192. }
  193.  
  194. ///
  195.  
  196. extern  struct Library  *SysBase,
  197.                         *IntuitionBase,
  198.                         *UtilityBase,
  199.                         *GfxBase,
  200.                         *DOSBase,
  201.                         *IconBase;
  202.         struct Library  *MUIMasterBase,
  203.                         *LocaleBase;
  204.  
  205.         struct tm_data  *maindata;
  206.         struct Catalog  *Catalog;
  207.  
  208. /*************************************************************************************************/
  209. /* locale stuff                                                                                  */
  210. /*************************************************************************************************/
  211. ///
  212. char *GetStr(int num)
  213. {
  214.         struct AppString *as = (struct AppString *)AppStrings;
  215.         while (as->as_ID != num) as++;
  216.         if (LocaleBase && Catalog) return(GetCatalogStr(Catalog,num,as->as_Str));
  217.         return((char *)as->as_Str);
  218. }
  219.  
  220. VOID LocalizeStringArray(char **array)
  221. {
  222.         char **x;
  223.         for (x=array;*x;x++)
  224.                 *x = GetStr((int)*x);
  225. }
  226.  
  227. VOID LocalizeNewMenu(struct NewMenu *nm)
  228. {
  229.         for (;nm->nm_Type!=NM_END;nm++)
  230.                 if (nm->nm_Label != NM_BARLABEL)
  231.                         nm->nm_Label = GetStr((int)nm->nm_Label);
  232. }
  233.  
  234. VOID InitLocale(VOID)
  235. {
  236.         if (LocaleBase = OpenLibrary("locale.library",38))
  237.                 Catalog = (struct Catalog *)OpenCatalog(NULL,"TinyMeterPrefs.catalog",TAG_DONE);
  238. }
  239.  
  240. VOID ExitLocale(VOID)
  241. {
  242.         if (Catalog) { CloseCatalog(Catalog); Catalog=NULL; }
  243.         if (LocaleBase) CloseLibrary(LocaleBase); { LocaleBase=NULL; }
  244. }
  245.  
  246. Object *MakePen()
  247. {
  248.     return(MUI_NewObject(MUIC_Poppen, MUIA_CycleChain, 1, MUIA_Window_Title, GetStr(MO_MakePen), TAG_DONE));
  249. }
  250.  
  251. ///
  252.  
  253. /*************************************************/
  254. /* some pics                                     */
  255. /*************************************************/
  256.  
  257. #include "about.c"
  258. #include "header_logo.c"
  259. #include "tmp_logo.c"
  260. #include "question.c"
  261.  
  262. /*************************************************/
  263. /* default settings                              */
  264. /*************************************************/
  265. ///
  266. struct tm_sys_set default_set=
  267. {
  268.     "TM40",
  269.     1,
  270.  
  271.     10,
  272.     10,
  273.     400,
  274.     2,
  275.  
  276.     "Workbench",
  277.  
  278.     "XHelvetica.font",
  279.     11,
  280.  
  281.     bg_file,
  282.     "hd0:prefs/patterns/leather",
  283.     FALSE,0x55555555,0x55555555,0x55555555,
  284.  
  285.     5,
  286.     1,
  287.  
  288.     0,
  289.     TRUE,
  290.  
  291.     win_normal,
  292.     0,
  293.     4,
  294.     4,
  295.     8,
  296.     8,
  297.  
  298.     bd_standard,
  299.     FALSE,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,
  300.     FALSE,0x0,0x0,0x0,
  301.  
  302.     idle_own
  303. };
  304.  
  305. struct tm_gau_set g4=
  306. {
  307.     typ_volume,
  308.     typ_histmeter,
  309.  
  310.     200,
  311.  
  312.     "Quill.font",
  313.     11,
  314.  
  315.     "ChipMem",
  316.     "HD1: %kd kb,%p%% free",
  317.     "HD1:",
  318.     ind_right,
  319.     TRUE,
  320.     TRUE,
  321.     TRUE,
  322.     TRUE,
  323.     FALSE,
  324.     FALSE,
  325.     TRUE,
  326.  
  327.     TRUE,2,0,0,
  328.     TRUE,2,0,0,
  329.     FALSE,0,0xFFFFFFFF,0,
  330.     FALSE,0,0,0xFFFFFFFF,
  331.     FALSE,0xFFFFFFFF,0,0,
  332.     TRUE,2,0,0,
  333.     TRUE,1,0,0,
  334.     TRUE,1,0,0,
  335.  
  336.     NULL
  337. };
  338.  
  339. struct tm_gau_set g3=
  340. {
  341.     typ_idle,
  342.     typ_histmeter,
  343.  
  344.     200,
  345.  
  346.     "Quill.font",
  347.     11,
  348.  
  349.     "ChipMem",
  350.     "CPU %p%% free",
  351.     "",
  352.     ind_right,
  353.     TRUE,
  354.     TRUE,
  355.     TRUE,
  356.     TRUE,
  357.     FALSE,
  358.     FALSE,
  359.     TRUE,
  360.  
  361.     TRUE,2,0,0,
  362.     TRUE,2,0,0,
  363.     FALSE,0,0xFFFFFFFF,0,
  364.     FALSE,0,0,0xFFFFFFFF,
  365.     FALSE,0xFFFFFFFF,0,0,
  366.     TRUE,2,0,0,
  367.     TRUE,1,0,0,
  368.     TRUE,1,0,0,
  369.  
  370.     &g4
  371. };
  372.  
  373.  
  374. struct tm_gau_set g2=
  375. {
  376.     typ_fast,
  377.     typ_gauge,
  378.  
  379.     20,
  380.  
  381.     "XHelvetica.font",
  382.     11,
  383.  
  384.     "FastMem",
  385.     "%td Bytes free",
  386.     "",
  387.     ind_right,
  388.     TRUE,
  389.     TRUE,
  390.     TRUE,
  391.     TRUE,
  392.     FALSE,
  393.     FALSE,
  394.     FALSE,
  395.  
  396.     TRUE,2,0,0,
  397.     TRUE,2,0,0,
  398.     FALSE,0,0xFFFFFFFF,0,
  399.     FALSE,0,0,0xFFFFFFFF,
  400.     FALSE,0xFFFFFFFF,0,0,
  401.     TRUE,2,0,0,
  402.     TRUE,1,0,0,
  403.     TRUE,0,0,0,
  404.  
  405.     &g3,
  406. };
  407.  
  408.  
  409. struct tm_gau_set g1=
  410. {
  411.     typ_chip,
  412.     typ_gauge,
  413.  
  414.     20,
  415.  
  416.     "XHelvetica.font",
  417.     11,
  418.  
  419.     "ChipMem",
  420.     "%td Bytes free",
  421.     "",
  422.     ind_right,
  423.     TRUE,
  424.     TRUE,
  425.     TRUE,
  426.     TRUE,
  427.     FALSE,
  428.     FALSE,
  429.     FALSE,
  430.  
  431.     TRUE,2,0,0,
  432.     TRUE,2,0,0,
  433.     FALSE,0,0xFFFFFFFF,0,
  434.     FALSE,0,0,0xFFFFFFFF,
  435.     FALSE,0xFFFFFFFF,0,0,
  436.     TRUE,2,0,0,
  437.     TRUE,1,0,0,
  438.     TRUE,0,0,0,
  439.  
  440.     &g2
  441. };
  442.  
  443. struct tm_gau_set  default_gauge=
  444. {
  445.     NULL,
  446.     typ_gauge,
  447.  
  448.     20,
  449.  
  450.     "topaz.font",
  451.     8,
  452.  
  453.     "",
  454.     "",
  455.     "",
  456.     ind_right,
  457.     TRUE,
  458.     TRUE,
  459.     TRUE,
  460.     TRUE,
  461.     FALSE,
  462.     FALSE,
  463.     TRUE,
  464.  
  465.     TRUE,2,0,0,
  466.     TRUE,2,0,0,
  467.     FALSE,0,0xFFFFFFFF,0,
  468.     FALSE,0,0,0xFFFFFFFF,
  469.     FALSE,0xFFFFFFFF,0,0,
  470.     TRUE,2,0,0,
  471.     TRUE,1,0,0,
  472.     TRUE,0,0,0,
  473.  
  474.     NULL
  475. };
  476.  
  477. ///
  478. /*************************************************/
  479. /* Drag & Drop lists                             */
  480. /*************************************************/
  481.  
  482. /******************************************/
  483. /* some hooks                             */
  484. /******************************************/
  485. ///
  486. char *gau_types[]=
  487. {
  488.     (STRPTR)MDL_typ_space,
  489.     (STRPTR)MDL_typ_total,
  490.     (STRPTR)MDL_typ_chip,
  491.     (STRPTR)MDL_typ_fast,
  492.     (STRPTR)MDL_typ_volume,
  493.     (STRPTR)MDL_typ_cpu,
  494.     (STRPTR)MDL_typ_retina,
  495.     (STRPTR)MDL_typ_largest_chip,
  496.     (STRPTR)MDL_typ_largest_fast,
  497.     (STRPTR)MDL_typ_largest_total,
  498.     (STRPTR)MDL_typ_largest_retina,
  499.     (STRPTR)MDL_typ_clock,
  500.     0L,
  501. };
  502.  
  503. __geta4 ULONG gau_consfunc(__a1 struct tm_gau_set *src)
  504. {
  505. /*    struct tm_gau_set *dst;
  506.     if(dst=AllocVec(sizeof(struct tm_gau_set),0L))
  507.     {
  508.         CopyMem(src,dst, sizeof(struct tm_gau_set));
  509.         return(dst);
  510.     }
  511.     else return(0L);*/
  512.     return(src);
  513. }
  514.  
  515. __geta4 void gau_desfunc(__a1 struct tm_gau_set *src)
  516. {
  517.     FreeVec(src);
  518. }
  519.  
  520. __geta4 ULONG gau_dispfunc(__a2 char **array,__a1 struct tm_gau_set *src)
  521. {
  522.     if(src->type!=0)
  523.     {
  524.         *array++ = gau_types[src->type];
  525.         if(src->type==typ_volume)
  526.         {
  527.             *array   = &src->expansion[0];
  528.         }
  529.         else *array = "";
  530.     }
  531.     else
  532.     {
  533.         *array++ = "-----------------";
  534.         *array   = "";
  535.     }
  536.     return(0L);
  537. }
  538.  
  539. static const struct Hook gau_ConstructHook = { { 0,0 }, (void *)gau_consfunc, NULL, NULL };
  540. static const struct Hook gau_DestructHook  = { { 0,0 }, (void *)gau_desfunc , NULL, NULL };
  541. static const struct Hook gau_DisplayHook   = { { 0,0 }, (void *)gau_dispfunc, NULL, NULL };
  542. ///
  543. /******************************************/
  544. /* FieldsList class                       */
  545. /******************************************/
  546. ///
  547. struct FieldsList_Data
  548. {
  549.         LONG dummy;
  550. };
  551.  
  552.  
  553. ULONG FieldsList_DragQuery(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
  554. {
  555.     if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
  556.     else if (msg->obj==(Object *)muiUserData(obj)) return(MUIV_DragQuery_Accept);
  557.     else return(MUIV_DragQuery_Refuse);
  558. }
  559.  
  560.  
  561. ULONG FieldsList_DragDrop(struct IClass *cl,Object *obj,struct MUIP_DragDrop *msg)
  562. {
  563.     if (msg->obj==obj) return(DoSuperMethodA(cl,obj,msg));
  564.     else
  565.     {
  566.         struct tm_gau_set   *entry;
  567.         LONG                dropmark;
  568.         LONG                sortable;
  569.         LONG                active;
  570.  
  571.         get(obj,MUIA_List_DragSortable,&sortable);
  572.         if (sortable)
  573.         {
  574.             get(msg->obj,MUIA_List_Active,&active);
  575.             if(entry=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),MEMF_CLEAR))
  576.             {
  577.                 CopyMem(&default_gauge,entry, sizeof(struct tm_gau_set));
  578.                 entry->type = (UWORD)active;
  579.                 if(active==typ_clock_) entry->gauge_type=typ_clock;
  580.  
  581.                 get     (obj,       MUIA_List_DropMark,     &dropmark);
  582.                 DoMethod(obj,       MUIM_List_InsertSingle, entry,dropmark);
  583.                 set     (obj,       MUIA_List_Active,       dropmark);
  584.                 set     (msg->obj,  MUIA_List_Active,       MUIV_List_Active_Off);
  585.             }
  586.         }
  587.         else
  588.         {
  589.             DoMethod(msg->obj,MUIM_List_Remove,MUIV_List_Remove_Active);
  590.         }
  591.         return(obj);
  592.     }
  593. }
  594.  
  595.  
  596. __geta4 ULONG FieldsList_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  597. {
  598.     switch (msg->MethodID)
  599.     {
  600.         case MUIM_DragQuery: return(FieldsList_DragQuery(cl,obj,(APTR)msg));
  601.         case MUIM_DragDrop : return(FieldsList_DragDrop (cl,obj,(APTR)msg));
  602.     }
  603.     return(DoSuperMethodA(cl,obj,msg));
  604. }
  605. ///
  606. /******************************************/
  607. /* ChooseFields class                     */
  608. /******************************************/
  609. ///
  610. Object *available, *visible;
  611.  
  612. struct ChooseFields_Data
  613. {
  614.     ULONG dummy;
  615. };
  616.  
  617. struct ComposerMsg
  618. {
  619.     ULONG   MethodID;
  620.     Object  *listview;
  621.     struct ChooseFields_Data *data;
  622. };
  623.  
  624. #define Dis_ID_DoubleClickComposer      1
  625. #define Dis_ID_ComposerClose            2
  626. #define Dis_ID_Composer_Save            3
  627. #define Composer_Originator             ( TAG_USER + 1 )
  628. #define Gauge_Settings                  ( TAG_USER + 2 )
  629.  
  630. static ULONG DoubleClickComposer(struct IClass *cl,Object *obj, struct ComposerMsg *msg)
  631. {
  632.     struct tm_gau_set   *desc;
  633.     Object *tmp;
  634.  
  635.     DoMethod(msg->listview,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&desc);
  636.  
  637.     if (desc)
  638.     {
  639.         set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,TRUE);
  640.         if (desc->type!=typ_none)
  641.         {
  642.             if (tmp = (APTR)NewObject(CL_Composer->mcc_Class,NULL,
  643.                 Composer_Originator, obj,
  644.                 Gauge_Settings,      desc,
  645.                 TAG_DONE))
  646.             {
  647.                 DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_ADDMEMBER,tmp);
  648.                 set(tmp,MUIA_Window_Open,TRUE);
  649.             }
  650.             else DisplayBeep(0);
  651.         }
  652.         set((Object *)xget(obj,MUIA_ApplicationObject),MUIA_Application_Sleep,FALSE);
  653.     }
  654.     return((ULONG)0);
  655. }
  656.  
  657. static ULONG ChooseFields_New(struct IClass *cl,Object *obj,struct opSet *msg)
  658. {
  659.     obj = (Object *)DoSuperNew(cl,obj,
  660.         MUIA_Group_Columns, 2,
  661.         MUIA_Group_VertSpacing, 1,
  662.         Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Available), End,
  663.         Child, TextObject, MUIA_Text_Contents, GetStr(MDL_Selected ), End,
  664.         Child, ListviewObject,
  665.             MUIA_Listview_DragType, 1,
  666.             MUIA_Listview_List, available = NewObject(CL_FieldsList->mcc_Class,NULL,
  667.                 InputListFrame,
  668.                 MUIA_List_SourceArray  , gau_types,
  669.                 MUIA_List_ShowDropMarks, FALSE,
  670.                 TAG_DONE),
  671.             End,
  672.         Child, ListviewObject,
  673.             MUIA_Listview_DragType, 1,
  674.             MUIA_Listview_DoubleClick,  TRUE,
  675.             MUIA_Listview_List, visible = NewObject(CL_FieldsList->mcc_Class,NULL,
  676.                 InputListFrame,
  677.                 MUIA_List_ConstructHook, &gau_ConstructHook,
  678.                 MUIA_List_DestructHook , &gau_DestructHook,
  679.                 MUIA_List_DisplayHook  , &gau_DisplayHook,
  680.                 MUIA_List_Format       , "MIW=50 MAW=100 BAR,",
  681.                 MUIA_List_DragSortable , TRUE,
  682.                 TAG_DONE),
  683.             End,
  684.         End;
  685.  
  686.     if (obj)
  687.     {
  688.         DoMethod(visible,MUIM_Notify,MUIA_Listview_DoubleClick,TRUE,obj,2,Dis_ID_DoubleClickComposer,visible);
  689.  
  690.         set(available,MUIA_UserData,visible);
  691.         set(visible,MUIA_UserData,available);
  692.  
  693.         set(available,MUIA_ShortHelp,GetStr(MDH_Available));
  694.         set(visible,MUIA_ShortHelp,GetStr(MDH_Selected));
  695.     }
  696.  
  697.     return((ULONG)obj);
  698. }
  699.  
  700. struct ComposerFinishMsg
  701. {
  702.     ULONG   MethodID;
  703.     Object  *win;
  704.     ULONG   ok;
  705. };
  706.  
  707. ULONG Composer_Close(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
  708. {
  709.     DoMethod(msg->win,Dis_ID_Composer_Save,msg->win,msg->ok);
  710.  
  711.     set(msg->win,MUIA_Window_Open,FALSE);
  712.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),OM_REMMEMBER,msg->win);
  713.  
  714.     MUI_DisposeObject(msg->win);
  715.  
  716.     return((ULONG)0L);
  717. }
  718.  
  719. static __saveds __asm ULONG ChooseFields_Dispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  720. {
  721.     switch (msg->MethodID)
  722.     {
  723.         case OM_NEW                     : return(ChooseFields_New       (cl,obj,(APTR)msg));
  724.         case Dis_ID_DoubleClickComposer : return(DoubleClickComposer    (cl,obj,(APTR)msg));
  725.         case Dis_ID_ComposerClose       : return(Composer_Close         (cl,obj,(APTR)msg));
  726.     }
  727.     return(DoSuperMethodA(cl,obj,msg));
  728. }
  729. ///
  730. /*************************************************/
  731. /* Composer Class                                */
  732. /*************************************************/
  733.  
  734. /******************************************/
  735. /* Composer Menu                          */
  736. /******************************************/
  737. ///
  738.  
  739. struct NewMenu CmpMenuData[] =
  740. {
  741.         { NM_TITLE, (STRPTR)MCM_Gauge          , 0 ,0 ,0             ,(APTR)CMP_PROJECT  },
  742.         { NM_ITEM , (STRPTR)MCM_Open           ,"O",0 ,0             ,(APTR)CMP_LOAD     },
  743.         { NM_ITEM , (STRPTR)MCM_SaveAs         ,"S",0 ,0             ,(APTR)CMP_SAVE     },
  744.         { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  745.         { NM_ITEM , (STRPTR)MCM_Cancel         ,"C",0 ,0             ,(APTR)CMP_CANCEL   },
  746.         { NM_END,NULL,0,0,0,(APTR)0 }
  747. };
  748. ///
  749. /******************************************/
  750. /* Composer class                         */
  751. /******************************************/
  752. ///
  753.  
  754. #define Dis_ID_DoubleClickDevice    8
  755. #define Dis_ID_SaveGauge            9
  756. #define Dis_ID_LoadGauge            10
  757. #define Dis_ID_ShowFormatHelp       11
  758.  
  759. struct Composer_Data
  760. {
  761.     Object              *ST_Label,
  762.                         *PO_Device,
  763.                         *ST_Device,
  764.                         *CY_Type,
  765.                         *NB_Height,
  766.                         *CS_Colors[16],
  767.                         *ST_Font,
  768.                         *ST_Format,
  769.                         *CM_3D,
  770.                         *CM_Border,
  771.                         *CM_Bg,
  772.                         *CM_Shadow,
  773.                         *CM_NoGauge,
  774.                         *CM_NoFmt,
  775.                         *CM_NoBase,
  776.                         *CY_Indent,
  777.                         *VL_Device,
  778.                         *originator,
  779.                         *sub_win;
  780.     struct tm_gau_set   *gauge;
  781. };
  782.  
  783. static ULONG DoubleClickDev(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  784. {
  785.     char   *my_ptr;
  786.     struct Composer_Data    *data = INST_DATA(cl,obj);
  787.  
  788.     DoMethod(data->VL_Device,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
  789.     if(my_ptr)
  790.     {
  791.         set(data->ST_Device,MUIA_String_Contents,my_ptr);
  792.         DoMethod(data->PO_Device,MUIM_Popstring_Close,0L);
  793.         return(DoSuperMethodA(cl,obj,msg));
  794.     }
  795.     else return(0L);
  796. }
  797.  
  798. ULONG Composer_Save(struct IClass *cl, Object *obj, struct ComposerFinishMsg *msg)
  799. {
  800.     int     i;
  801.     ULONG   dummy;
  802.     struct  Composer_Data    *data   = INST_DATA(cl,obj);
  803.     if(msg->ok==TRUE)
  804.     {
  805.         for(i=0;i<8;i++) getColor(&data->gauge->Colors[i],data->CS_Colors[i]);
  806.         get(data->ST_Label  ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->label[0]    , dummy ? (char *)dummy : " " );
  807.         get(data->ST_Device ,MUIA_String_Contents,&dummy); strcpy(&data->gauge->expansion[0], dummy ? (char *)dummy : " " );
  808.         get(data->CY_Type   ,MUIA_Cycle_Active   ,&dummy); data->gauge->gauge_type  =(UWORD)dummy;
  809.         get(data->NB_Height ,MUIA_Numeric_Value  ,&dummy); data->gauge->size_y      =(UWORD)dummy-100;
  810.         get(data->CM_3D     ,MUIA_Selected       ,&dummy); data->gauge->sty_3d      =(UWORD)dummy;
  811.         get(data->CM_Border ,MUIA_Selected       ,&dummy); data->gauge->sty_border  =(UWORD)dummy;
  812.         get(data->CM_Bg     ,MUIA_Selected       ,&dummy); data->gauge->sty_bg      =(UWORD)dummy;
  813.         get(data->CM_Shadow ,MUIA_Selected       ,&dummy); data->gauge->sty_shadow  =(UWORD)dummy;
  814.         get(data->CM_NoGauge,MUIA_Selected       ,&dummy); data->gauge->sty_nogauge =(UWORD)dummy;
  815.         get(data->CM_NoFmt  ,MUIA_Selected       ,&dummy); data->gauge->sty_noformat=(UWORD)dummy;
  816.         get(data->CM_NoBase ,MUIA_Selected       ,&dummy); data->gauge->sty_nobase  =(UWORD)dummy;
  817.         get(data->CY_Indent ,MUIA_Cycle_Active   ,&dummy); data->gauge->indent      =(UWORD)dummy;
  818.         get(data->ST_Font   ,MUIA_String_Contents,&dummy); sscanf((char *)dummy,"%[^/]/%d",&data->gauge->font[0],&i);
  819.         strcat(&data->gauge->font[0],".font"); data->gauge->font_size=(WORD)i;
  820.         get(data->ST_Format ,MUIA_String_Contents,&dummy); strcpy((char *)&data->gauge->format[0], dummy ? (char *)dummy : " " );
  821.     }
  822.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  823. }
  824.  
  825. char   *types[]         ={(STRPTR)MCL_Normal,(STRPTR)MCL_Historymeter,0L};
  826.  
  827. char   *indent[]        ={(STRPTR)MCL_center,(STRPTR)MCL_left,(STRPTR)MCL_right,0L};
  828.  
  829. char   *regcomposer[]   ={(STRPTR)MCR_general,(STRPTR)MCR_flags,(STRPTR)MCR_colors,0L};
  830.  
  831. insertComposerSettings(struct tm_gau_set *gauge, struct Composer_Data *data)
  832. {
  833.     int     i;
  834.     char    dummy[256];
  835.  
  836.     for(i=0;i<8;i++)
  837.     {
  838.         initColor(&gauge->Colors[i],data->CS_Colors[i]);
  839.         if(gauge->type == typ_clock_) set(data->CS_Colors[i],MUIA_Disabled, TRUE);
  840.     }
  841.     set(data->NB_Height,MUIA_Numeric_Value,gauge->size_y+100);
  842.     if(gauge->type != typ_volume) set(data->PO_Device, MUIA_Disabled, TRUE);
  843.     if((gauge->gauge_type==typ_histmeter)||(gauge->type==typ_clock_))
  844.     {
  845.         set(data->ST_Label,  MUIA_Disabled, TRUE);
  846.         set(data->CM_3D,     MUIA_Disabled, TRUE);
  847.         set(data->CM_Shadow, MUIA_Disabled, TRUE);
  848.         if(gauge->type==typ_clock_)
  849.         {
  850.             set(data->CM_Bg,     MUIA_Disabled, TRUE);
  851.             set(data->CS_Colors[col_format] ,MUIA_Disabled,FALSE);
  852.             set(data->CS_Colors[col_dark]   ,MUIA_Disabled,FALSE);
  853.             set(data->CM_Shadow     ,MUIA_Disabled,FALSE);
  854.             set(data->CM_Border     ,MUIA_Disabled, TRUE);
  855.             set(data->CM_NoGauge    ,MUIA_Disabled, TRUE);
  856.             set(data->CM_NoFmt      ,MUIA_Disabled, TRUE);
  857.             set(data->CM_NoBase     ,MUIA_Disabled, TRUE);
  858.             set(data->CY_Type       ,MUIA_Disabled, TRUE);
  859.         }
  860.     }
  861.  
  862.     set(data->CM_3D     ,MUIA_Selected,gauge->sty_3d);
  863.     set(data->CM_Border ,MUIA_Selected,gauge->sty_border);
  864.     set(data->CM_Bg     ,MUIA_Selected,gauge->sty_bg);
  865.     set(data->CM_Shadow ,MUIA_Selected,gauge->sty_shadow);
  866.     set(data->CM_NoGauge,MUIA_Selected,gauge->sty_nogauge);
  867.     set(data->CM_NoFmt  ,MUIA_Selected,gauge->sty_noformat);
  868.     set(data->CM_NoBase ,MUIA_Selected,gauge->sty_nobase);
  869.  
  870.     set(data->ST_Format ,MUIA_String_Contents,&gauge->format[0]);
  871.  
  872.     strcpy(&dummy[0],gauge->font);
  873.     sprintf((char *)&dummy[strlen(&dummy[0])-5],"/%d",gauge->font_size);
  874.  
  875.     set(data->ST_Font   ,MUIA_String_Contents,&dummy[0]);
  876.     set(data->ST_Device ,MUIA_String_Contents,&gauge->expansion[0]);
  877.     set(data->ST_Label  ,MUIA_String_Contents,&gauge->label[0]);
  878.  
  879.     set(data->CY_Indent ,MUIA_Cycle_Active,gauge->indent);
  880.     set(data->CY_Type   ,MUIA_Cycle_Active,gauge->gauge_type);
  881. }
  882.  
  883. LoadGaugeSet(struct IClass *cl,Object *obj)
  884. {
  885.     struct Composer_Data    *data=INST_DATA(cl,obj);
  886.     char                    *file;
  887.     ULONG                   my_file;
  888.     ULONG                   buf;
  889.     UWORD                   old_type;
  890.     char                    old_expansion[128];
  891.  
  892.     if(file=getfilename(obj,GetStr(MCM_LoadGauge),"#?.tmgauge",FALSE))
  893.     {
  894.         if(my_file=(ULONG)Open(file,MODE_OLDFILE))
  895.         {
  896.             Read(my_file,&buf,4L);
  897.             if(buf==0x544D4731)
  898.             {
  899.                 old_type=data->gauge->type;
  900.                 CopyMem(&data->gauge->expansion[0],&old_expansion[0],128L);
  901.                 Read(my_file,data->gauge,sizeof(struct tm_gau_set));
  902.                 data->gauge->type=old_type;
  903.                 CopyMem(&old_expansion[0],&data->gauge->expansion[0],128L);
  904.                 insertComposerSettings(data->gauge,data);
  905.             }
  906.             else MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MCM_NotTmGauge_fmt),GetStr(MCM_NotTmGauge),NULL);
  907.             Close(my_file);
  908.         }
  909.     }
  910. }
  911.  
  912. SaveGaugeSet(struct IClass *cl,Object *obj)
  913. {
  914.     struct Composer_Data        *data=INST_DATA(cl,obj);
  915.     char                        *file;
  916.     ULONG                       buf,my_file;
  917.     struct ComposerFinishMsg    msg;
  918.  
  919.     msg.ok=TRUE;
  920.  
  921.     Composer_Save( cl,obj,&msg);
  922.  
  923.     buf=0x544D4731;
  924.  
  925.     if(file=getfilename(obj,GetStr(MCM_SaveGauge),"#?.tmgauge",TRUE))
  926.     {
  927.         if(my_file=Open(file,MODE_NEWFILE))
  928.         {
  929.             Write(my_file,&buf,4L);
  930.             Write(my_file,data->gauge,sizeof(struct tm_gau_set));
  931.             Close(my_file);
  932.         }
  933.     }
  934. }
  935.  
  936. Object  *WI_HelpFmt,
  937.         *WI_HelpClock;
  938.  
  939. static ULONG Composer_New(struct IClass *cl,Object *obj,struct opSet *msg)
  940. {
  941.     struct Composer_Data    *data;
  942.     struct tm_gau_set       *gauge;
  943.     Object                  *BT_Use,
  944.                             *BT_Cancel,
  945.                             *ST_Label,
  946.                             *PO_Device,
  947.                             *ST_Device,
  948.                             *CY_Type,
  949.                             *NB_Height,
  950.                             *CS_Colors[8],
  951.                             *ST_Font,
  952.                             *ST_Format,
  953.                             *CM_3D,
  954.                             *CM_Border,
  955.                             *CM_Bg,
  956.                             *CM_Shadow,
  957.                             *CM_NoGauge,
  958.                             *CM_NoFmt,
  959.                             *CM_NoBase,
  960.                             *CY_Indent,
  961.                             *LV_Device,
  962.                             *VL_Device,
  963.                             *CMP_Menu,
  964.                             *BT_Quest;
  965.  
  966.     if(gauge = (struct tm_gau_set *)GetTagData(Gauge_Settings,0,msg->ops_AttrList))
  967.     {
  968.         if( obj = (Object *)DoSuperNew(cl,obj,
  969.                 MUIA_Window_Title       , gau_types[gauge->type] ,
  970.                 MUIA_Window_ID          , MAKE_ID('T','M','C','O'),
  971.                 MUIA_Window_Menustrip   , CMP_Menu = MUI_MakeObject(MUIO_MenustripNM,CmpMenuData,0),
  972.                 WindowContents, VGroup, ButtonFrame,
  973.                     Child, HGroup, MUIA_Background, MUII_SHADOW,
  974.                         Child, BodychunkObject,
  975.                             MUIA_FixWidth             , HEADER_LOGO_WIDTH ,
  976.                             MUIA_FixHeight            , HEADER_LOGO_HEIGHT,
  977.                             MUIA_Bitmap_Width         , HEADER_LOGO_WIDTH ,
  978.                             MUIA_Bitmap_Height        , HEADER_LOGO_HEIGHT,
  979.                             MUIA_Bodychunk_Depth      , HEADER_LOGO_DEPTH ,
  980.                             MUIA_Bodychunk_Body       , (UBYTE *)header_logo_body,
  981.                             MUIA_Bodychunk_Compression, HEADER_LOGO_COMPRESSION,
  982.                             MUIA_Bodychunk_Masking    , HEADER_LOGO_MASKING,
  983.                             MUIA_Bitmap_SourceColors  , (ULONG *)header_logo_colors,
  984.                             MUIA_Bitmap_Transparent   , 0,
  985.                         End,
  986.                         Child, HSpace(0),
  987.                     End,
  988.  
  989.                     Child, RegisterGroup(regcomposer),
  990.                         MUIA_Register_Frame, TRUE,
  991.  
  992.                         Child, ColGroup(2),
  993.                             Child, VSpace(0),
  994.                             Child, VSpace(0),
  995.                             Child, Label(GetStr(MCO_type)),
  996.                             Child,  CY_Type=CycleObject,
  997.                                 MUIA_Cycle_Entries, types,
  998.                             End,
  999.                             Child, Label(GetStr(MCO_label)),
  1000.                             Child, ST_Label=String(0L,16),
  1001.                             Child, Label(GetStr(MCO_height)),
  1002.                             Child, ColGroup(2), Child, NB_Height=MUI_MakeObject(MUIO_NumericButton,NULL,100,400,GetStr(MCO_height_fmt)), Child, HVSpace, End,
  1003.                             Child, Label(GetStr(MCO_font)),
  1004.                             Child,  PopaslObject,
  1005.                                 MUIA_Popstring_String, ST_Font=(Object *)String(0L,80),
  1006.                                 MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1007.                                 MUIA_Popasl_Type , ASL_FontRequest,
  1008.                                 ASLFO_TitleText  , GetStr(MCO_sel_font),
  1009.                             End,
  1010.                             Child, Label(GetStr(MCO_device)),
  1011.                             Child, PO_Device=PopobjectObject,
  1012.                                 MUIA_Popstring_String, ST_Device=String(0L,128),
  1013.                                 MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1014.                                 MUIA_Popobject_Object, LV_Device=ListviewObject,
  1015.                                     MUIA_Weight, 20,
  1016.                                     MUIA_Listview_Input, TRUE,
  1017.                                     MUIA_Listview_DoubleClick, TRUE,
  1018.                                     MUIA_Listview_List, VL_Device=VolumelistObject,
  1019.                                         InputListFrame,
  1020.                                         MUIA_Dirlist_Directory, "ram:",
  1021.                                     End,
  1022.                                 End,
  1023.                             End,
  1024.  
  1025.                             Child, VSpace(0),
  1026.                             Child, VSpace(0),
  1027.                         End,
  1028.  
  1029.                         Child, ColGroup(2),
  1030.                             Child, VSpace(0),
  1031.                             Child, VSpace(0),
  1032.                             Child, Label(GetStr(MCO_3dlook)),
  1033.                             Child, CM_3D=CheckMark(gauge->sty_3d),
  1034.                             Child, Label(GetStr(MCO_border)),
  1035.                             Child, CM_Border=CheckMark(gauge->sty_border),
  1036.                             Child, Label(GetStr(MCO_nobgcol)),
  1037.                             Child, CM_Bg=CheckMark(gauge->sty_bg),
  1038.                             Child, Label(GetStr(MCO_shadow)),
  1039.                             Child, CM_Shadow=CheckMark(gauge->sty_shadow),
  1040.                             Child, Label(GetStr(MCO_disgaug)),
  1041.                             Child, CM_NoGauge=CheckMark(gauge->sty_nogauge),
  1042.                             Child, Label(GetStr(MCO_disfmt)),
  1043.                             Child, CM_NoFmt=CheckMark(gauge->sty_noformat),
  1044.                             Child, Label(GetStr(MCO_disbas)),
  1045.                             Child, CM_NoBase=CheckMark(gauge->sty_nobase),
  1046.                             Child, VSpace(0),
  1047.                             Child, VSpace(0),
  1048.                         End,
  1049.  
  1050.                         Child, ColGroup(2),
  1051.                             Child, ColGroup(2),
  1052.                                 Child, VSpace(0),
  1053.                                 Child, VSpace(0),
  1054.                                 Child, Label(GetStr(MCO_col_label)),
  1055.                                 Child, CS_Colors[col_label]     =MakePen(),
  1056.                                 Child, Label(GetStr(MCO_col_fmt)),
  1057.                                 Child, CS_Colors[col_format]    =MakePen(),
  1058.                                 Child, Label(GetStr(MCO_col_bas)),
  1059.                                 Child, CS_Colors[col_base]      =MakePen(),
  1060.                                 Child, Label(GetStr(MCO_col_cur)),
  1061.                                 Child, CS_Colors[col_current]   =MakePen(),
  1062.                                 Child, VSpace(0),
  1063.                                 Child, VSpace(0),
  1064.                             End,
  1065.  
  1066.                             Child, ColGroup(2),
  1067.                                 Child, VSpace(0),
  1068.                                 Child, VSpace(0),
  1069.                                 Child, Label(GetStr(MCO_col_neg)),
  1070.                                 Child, CS_Colors[col_negative]  =MakePen(),
  1071.                                 Child, Label(GetStr(MCO_col_bright)),
  1072.                                 Child, CS_Colors[col_bright]    =MakePen(),
  1073.                                 Child, Label(GetStr(MCO_col_dark)),
  1074.                                 Child, CS_Colors[col_dark]      =MakePen(),
  1075.                                 Child, Label(GetStr(MCO_col_bg)),
  1076.                                 Child, CS_Colors[col_bg]        =MakePen(),
  1077.                                 Child, VSpace(0),
  1078.                                 Child, VSpace(0),
  1079.                             End,
  1080.                         End,
  1081.                     End,
  1082.  
  1083.                     Child, HGroup, GroupFrame,
  1084.                         Child, Label(GetStr(MCO_fmt)),
  1085.                         Child, ST_Format=(Object *)String(0L,128),
  1086.                         Child, BT_Quest=BodychunkObject,
  1087.                             ButtonFrame,
  1088.                             MUIA_InputMode            , MUIV_InputMode_RelVerify,
  1089.                             MUIA_FixWidth             , QUESTION_WIDTH ,
  1090.                             MUIA_FixHeight            , QUESTION_HEIGHT,
  1091.                             MUIA_Bitmap_Width         , QUESTION_WIDTH ,
  1092.                             MUIA_Bitmap_Height        , QUESTION_HEIGHT,
  1093.                             MUIA_Bodychunk_Depth      , QUESTION_DEPTH ,
  1094.                             MUIA_Bodychunk_Body       , (UBYTE *)question_body,
  1095.                             MUIA_Bodychunk_Compression, QUESTION_COMPRESSION,
  1096.                             MUIA_Bodychunk_Masking    , QUESTION_MASKING,
  1097.                             MUIA_Bitmap_SourceColors  , (ULONG *)question_colors,
  1098.                             MUIA_Bitmap_Transparent   , 0,
  1099.                         End,
  1100.                         Child,  CY_Indent=CycleObject,
  1101.                             MUIA_Weight, 0,
  1102.                             MUIA_Cycle_Entries, indent,
  1103.                         End,
  1104.                     End,
  1105.                     Child, HGroup,
  1106.                         Child, BT_Use = (Object *)SimpleButton(GetStr(MCO_Use)),
  1107.                         Child, BT_Cancel = (Object *)SimpleButton(GetStr(MCO_Cancel)),
  1108.                     End,
  1109.                 End,
  1110.             End)
  1111.         {
  1112.             int i;
  1113.  
  1114.             data=INST_DATA(cl,obj);
  1115.  
  1116.             data->gauge         = gauge;
  1117.             data->ST_Label      = ST_Label;
  1118.             set(ST_Label,MUIA_ShortHelp,GetStr(MOH_Label));
  1119.             data->PO_Device     = PO_Device;
  1120.             set(PO_Device,MUIA_ShortHelp,GetStr(MOH_Device));
  1121.             data->ST_Device     = ST_Device;
  1122.             data->CY_Type       = CY_Type;
  1123.             data->NB_Height     = NB_Height;
  1124.             data->CM_3D         = CM_3D;
  1125.             data->CM_Border     = CM_Border;
  1126.             set(CM_Border,MUIA_ShortHelp,GetStr(MOH_3d));
  1127.             data->CM_Bg         = CM_Bg;
  1128.             set(CM_Bg,MUIA_ShortHelp,GetStr(MOH_Bg));
  1129.             data->CM_Shadow     = CM_Shadow;
  1130.             data->CM_NoGauge    = CM_NoGauge;
  1131.             set(CM_NoGauge,MUIA_ShortHelp,GetStr(MOH_NoGauge));
  1132.             data->CM_NoFmt      = CM_NoFmt;
  1133.             set(CM_NoFmt,MUIA_ShortHelp,GetStr(MOH_NoFmt));
  1134.             data->CM_NoBase     = CM_NoBase;
  1135.             set(CM_NoBase,MUIA_ShortHelp,GetStr(MOH_NoBase));
  1136.             data->CY_Indent     = CY_Indent;
  1137.             data->ST_Font       = ST_Font;
  1138.             data->VL_Device     = VL_Device;
  1139.             data->ST_Format     = ST_Format;
  1140.             for(i=0;i<8;i++) data->CS_Colors[i]=CS_Colors[i];
  1141.  
  1142.             insertComposerSettings(gauge,data);
  1143.  
  1144.             data->originator = (Object *)GetTagData(Composer_Originator,0,msg->ops_AttrList);
  1145.  
  1146.             DoMethod(LV_Device, MUIM_Notify,MUIA_Listview_DoubleClick      ,TRUE,obj,1,Dis_ID_DoubleClickDevice);
  1147.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,ST_Label,3,MUIM_Set,MUIA_Disabled,FALSE);
  1148.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,ST_Label,3,MUIM_Set,MUIA_Disabled,TRUE);
  1149.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,CM_3D,3,MUIM_Set,MUIA_Disabled,FALSE);
  1150.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,CM_3D,3,MUIM_Set,MUIA_Disabled,TRUE);
  1151.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,CM_Shadow,3,MUIM_Set,MUIA_Disabled,FALSE);
  1152.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,CM_Shadow,3,MUIM_Set,MUIA_Disabled,TRUE);
  1153.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_gauge    ,CM_Bg,3,MUIM_Set,MUIA_Disabled,FALSE);
  1154.             DoMethod(CY_Type,   MUIM_Notify,MUIA_Cycle_Active,typ_histmeter,CM_Bg,3,MUIM_Set,MUIA_Disabled,TRUE);
  1155.             if(gauge->type!=typ_clock_) DoMethod(BT_Quest,  MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpFmt   ,3,MUIM_Set,MUIA_Window_Open,TRUE);
  1156.             else                        DoMethod(BT_Quest,  MUIM_Notify,MUIA_Pressed,FALSE, WI_HelpClock ,3,MUIM_Set,MUIA_Window_Open,TRUE);
  1157.  
  1158.             DoMethod(obj,       MUIM_Notify,MUIA_Window_CloseRequest,TRUE, MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
  1159.             DoMethod(BT_Cancel, MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,FALSE);
  1160.             DoMethod(BT_Use,    MUIM_Notify,MUIA_Pressed,FALSE,            MUIV_Notify_Application,6,MUIM_Application_PushMethod,data->originator,3,Dis_ID_ComposerClose,obj,TRUE);
  1161.  
  1162.             DoMethod(obj,       MUIM_Notify,MUIA_Window_MenuAction,CMP_SAVE,obj,1,Dis_ID_SaveGauge);
  1163.             DoMethod(obj,       MUIM_Notify,MUIA_Window_MenuAction,CMP_LOAD,obj,1,Dis_ID_LoadGauge);
  1164.  
  1165.             return((ULONG)obj);
  1166.         }
  1167.     }
  1168.     return(0L);
  1169. }
  1170.  
  1171. static __saveds __asm ULONG ComposerDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  1172. {
  1173.     switch (msg->MethodID)
  1174.     {
  1175.         case OM_NEW                     : return(Composer_New   (cl,obj,(APTR)msg));
  1176.         case Dis_ID_Composer_Save       : return(Composer_Save  (cl,obj,(APTR)msg));
  1177.         case Dis_ID_DoubleClickDevice   : return(DoubleClickDev (cl,obj,(APTR)msg));
  1178.         case Dis_ID_SaveGauge           : return(SaveGaugeSet   (cl,obj));
  1179.         case Dis_ID_LoadGauge           : return(LoadGaugeSet   (cl,obj));
  1180.     }
  1181.     return(DoSuperMethodA(cl,obj,msg));
  1182. }
  1183. ///
  1184. /*************************************************/
  1185. /* Main Window and his dispatcher                */
  1186. /*************************************************/
  1187.  
  1188. /******************************************/
  1189. /* some vars                              */
  1190. /******************************************/
  1191. ///
  1192. #define Dis_ID_DoubleClick1 1
  1193. #define Dis_ID_Finish       2
  1194. #define Dis_ID_DoubleClick2 3
  1195. #define Dis_ID_Save         4
  1196. #define Dis_ID_Snap         5
  1197. #define Dis_ID_Load         6
  1198.  
  1199. struct NewMenu MenuData1[] =
  1200. {
  1201.         { NM_TITLE, (STRPTR)MM_Project         , 0 ,0 ,0             ,(APTR)MEN_PROJECT  },
  1202.         { NM_ITEM , (STRPTR)MM_Open            ,"O",0 ,0             ,(APTR)MEN_OPEN     },
  1203.         { NM_ITEM , (STRPTR)MM_SaveAs          ,"S",0 ,0             ,(APTR)MEN_SAVE     },
  1204.         { NM_ITEM , (STRPTR)MM_About           ,"?",0 ,0             ,(APTR)MEN_ABOUT    },
  1205.         { NM_ITEM ,  NM_BARLABEL               , 0 ,0 ,0             ,(APTR)0            },
  1206.         { NM_ITEM , (STRPTR)MM_Quit            ,"Q",0 ,0             ,(APTR)MEN_QUIT     },
  1207.         { NM_END,NULL,0,0,0,(APTR)0 }
  1208. };
  1209.  
  1210. struct ls_layout
  1211. {
  1212.     char    *entry_desc;
  1213.     BYTE     entry_selected;
  1214.     BOOL     entry_max;
  1215.     char    *entry[6];
  1216. };
  1217.  
  1218. struct  ls_layout switches[]=
  1219.         {
  1220.             {(STRPTR)ML_Window,         0,0,0,0,0,0,0,0},
  1221.             {(STRPTR)ML_BgPic,          0,2,(STRPTR)ML_BgPic_None,(STRPTR)ML_BgPic_File,(STRPTR)ML_BgPic_Snap,0,0,0},
  1222.             {(STRPTR)ML_WinBeh,         0,2,(STRPTR)ML_WinBeh_Normal,(STRPTR)ML_WinBeh_Front,(STRPTR)ML_WinBeh_Back,0,0,0},
  1223.             {(STRPTR)ML_WinMov,         0,1,(STRPTR)ML_WinMov_Normal,(STRPTR)ML_WinMov_Fixed,0,0,0,0},
  1224.             {(STRPTR)ML_Border,         0,3,(STRPTR)ML_Border_None,(STRPTR)ML_Border_Simple,(STRPTR)ML_Border_Standard,(STRPTR)ML_Border_Double,0,0},
  1225.             {(STRPTR)ML_Startup,        0,0,0,0,0,0,0,0},
  1226.             {(STRPTR)ML_ScrNot,         0,1,(STRPTR)ML_ScrNot_No,(STRPTR)ML_ScrNot_Yes,0,0,0,0},
  1227.             {(STRPTR)ML_Cpu,            0,2,(STRPTR)ML_Cpu_None,(STRPTR)ML_Cpu_Executive,(STRPTR)ML_Cpu_Own,0,0,0},
  1228.             NULL
  1229.         };
  1230.  
  1231. char    *mainlister[]=
  1232.         {
  1233.             (STRPTR)MOL_General,
  1234.             (STRPTR)MOL_Compose,
  1235.             NULL
  1236.         };
  1237.  
  1238. char    *sublister[]=
  1239.         {
  1240.             (STRPTR)MOL_sub_General,
  1241.             (STRPTR)MOL_sub_Window,
  1242.             (STRPTR)MOL_sub_Layout,
  1243.             NULL
  1244.         };
  1245.  
  1246. struct MainData
  1247. {
  1248.     ULONG   dummy;
  1249. };
  1250.  
  1251. char    *pubscr[256];
  1252.  
  1253. struct  BitMap my_bmp;
  1254.  
  1255. Object  *BT_Save,
  1256.         *BT_Use,
  1257.         *BT_Test,
  1258.         *BT_Cancel,
  1259.         *ls_Switch,
  1260.         *ls_PubScr,
  1261.         *lv_Switch,
  1262.         *lv_PubScr,
  1263.         *ST_PubScr,
  1264.         *PO_PubScr,
  1265.         *MN_Main,
  1266.         *WI_About,
  1267.         *IN_posx,
  1268.         *IN_posy,
  1269.         *IN_sizx,
  1270.         *ST_bg,
  1271.         *NB_wait,
  1272.         *NB_mem,
  1273.         *NB_vol,
  1274.         *NB_bordx,
  1275.         *NB_bordy,
  1276.         *NB_spcx,
  1277.         *NB_spcy,
  1278.         *NB_col,
  1279.         *MN_Colors[3],
  1280.         *BT_Snap,
  1281.         *LV_Composer;
  1282.  
  1283. ///
  1284. /******************************************/
  1285. /* some listview hooks                    */
  1286. /******************************************/
  1287. ///
  1288. __saveds __asm APTR lay_consfunc(__a1 struct ls_layout *src)
  1289. {
  1290.     return(src);
  1291. }
  1292.  
  1293. __saveds __asm ULONG lay_desfunc(__a1 struct ls_layout *src)
  1294. {
  1295.     return(0L);
  1296. }
  1297.  
  1298. __saveds __asm void lay_dispfunc(__a2 char **array,__a1 struct ls_layout *src)
  1299. {
  1300.     *array++ = src->entry_desc;
  1301.     *array   = src->entry[src->entry_selected];
  1302. }
  1303.  
  1304. static const struct Hook lay_ConstructHook = { { 0,0 }, (void *)lay_consfunc, NULL, NULL };
  1305. static const struct Hook lay_DestructHook  = { { 0,0 }, (void *)lay_desfunc , NULL, NULL };
  1306. static const struct Hook lay_DisplayHook   = { { 0,0 }, (void *)lay_dispfunc, NULL, NULL };
  1307. ///
  1308. /******************************************/
  1309. /* load settings and a method             */
  1310. /******************************************/
  1311. ///
  1312. #define load_standard  0
  1313. #define load_file      1
  1314.  
  1315. struct LoadSetMsg
  1316. {
  1317.     ULONG           MethodID;
  1318.     ULONG           what;
  1319. };
  1320.  
  1321. insertSettings(struct tm_sys_set *set,struct tm_gau_set *list)
  1322. {
  1323.     struct ls_layout *src;
  1324.  
  1325.     set(NB_col  ,MUIA_Numeric_Value,set->colums);
  1326.     set(NB_bordx,MUIA_Numeric_Value,set->win_border_x);
  1327.     set(NB_bordy,MUIA_Numeric_Value,set->win_border_y);
  1328.     set(NB_spcx ,MUIA_Numeric_Value,set->win_space_x);
  1329.     set(NB_spcy ,MUIA_Numeric_Value,set->win_space_y);
  1330.     set(NB_wait ,MUIA_Numeric_Value,set->start_wait);
  1331.     set(NB_mem  ,MUIA_Numeric_Value,set->mem_refresh);
  1332.     set(NB_vol  ,MUIA_Numeric_Value,set->vol_refresh);
  1333.  
  1334.     DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src);
  1335.     src->entry_selected=set->bg_type;
  1336.     DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src);
  1337.     src->entry_selected=set->win_backfront;
  1338.     DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src);
  1339.     src->entry_selected=set->win_move;
  1340.     DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src);
  1341.     src->entry_selected=set->bd_type;
  1342.     DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src);
  1343.     src->entry_selected=set->start_usescreennotify;
  1344.     DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src);
  1345.     src->entry_selected=set->Executive;
  1346.  
  1347.     initColor(&set->bg_color,MN_Colors[0]);
  1348.     initColor(&set->bright_color,MN_Colors[1]);
  1349.     initColor(&set->dark_color,MN_Colors[2]);
  1350.  
  1351.     set(ST_PubScr,  MUIA_String_Contents    ,&set->pub_name[0]);
  1352.     set(IN_posx,    MUIA_String_Integer     ,set->x_pos);
  1353.     set(IN_posy,    MUIA_String_Integer     ,set->y_pos);
  1354.     set(IN_sizx,    MUIA_String_Integer     ,set->x_siz);
  1355.     set(ST_bg,      MUIA_String_Contents    ,&set->bg_picture[0]);
  1356.  
  1357.     DoMethod(visible,MUIM_List_Clear,0L);
  1358.     do
  1359.     {
  1360.         DoMethod(visible,MUIM_List_InsertSingle,list,MUIV_List_Insert_Bottom);
  1361.     }
  1362.     while(list=list->next);
  1363.     DoMethod(visible,MUIM_List_Redraw,MUIV_List_Redraw_All);
  1364.     DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_All);
  1365. }
  1366.  
  1367. int getNum(struct tm_gau_set *list)
  1368. {
  1369.     int num=1;
  1370.     while(list=list->next)num++;
  1371.     return(num);
  1372. }
  1373.  
  1374. useDefault(struct tm_data *data)
  1375. {
  1376.     struct tm_gau_set   *many,
  1377.                         *act,
  1378.                         *old;
  1379.  
  1380.     CopyMem((char *)&default_set,data->set,sizeof(struct tm_sys_set));
  1381.     
  1382.     if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
  1383.     {
  1384.         many=&g1; data->list=act; CopyMem((char *)many,act,sizeof(struct tm_gau_set));
  1385.         while(many=many->next)
  1386.         {
  1387.             old=act;
  1388.             if(act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),0L))
  1389.             {
  1390.                 old->next=act;
  1391.                 CopyMem((char *)many,act,sizeof(struct tm_gau_set));
  1392.             }
  1393.             else {act->next=0L;return;}
  1394.         }
  1395.         act->next=0L;
  1396.     }
  1397.     else data->list=0L;
  1398. }
  1399.  
  1400.  
  1401. BOOL loadSettings(Object *obj,struct tm_data *data, char *file)
  1402. {
  1403.     ULONG  my_file;
  1404.     struct tm_gau_set *many,*act;
  1405.  
  1406.     if(!maindata->set)maindata->set=AllocVec(sizeof(struct tm_sys_set),0L);
  1407.  
  1408.     if(my_file=(UBYTE *)Open(file,MODE_OLDFILE))
  1409.     {
  1410.         if(!Read(my_file,data->set,(ULONG)sizeof(struct tm_sys_set)))
  1411.         {
  1412.             if(MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MM_BadPrefs_fmt),GetStr(MM_BadPrefs),NULL))
  1413.                 useDefault(data);
  1414.         }
  1415.         else
  1416.         {
  1417.             act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
  1418.             data->list=act; many=act;
  1419.             while(Read(my_file,(char *)act,(ULONG)sizeof(struct tm_gau_set)))
  1420.             {
  1421.                 many=act;
  1422.                 act=(struct tm_gau_set *)AllocVec(sizeof(struct tm_gau_set),NULL);
  1423.                 many->next=act;
  1424.             }
  1425.             many->next=NULL; FreeVec(act); act=NULL;
  1426.         }
  1427.         Close(my_file);
  1428.     }
  1429.     else if(MUI_RequestA((Object *)xget(obj,MUIA_ApplicationObject),obj,0,"TinyMeterPrefs",GetStr(MM_BadPrefs_fmt),GetStr(MM_BadPrefs),NULL))
  1430.         useDefault(data);
  1431.  
  1432.     data->num_of_gaug=getNum(data->list);
  1433. }
  1434.  
  1435. ULONG loadManager(struct IClass *cl,Object *obj, struct LoadSetMsg *msg)
  1436. {
  1437.     char *file;
  1438.     switch (msg->what)
  1439.     {
  1440.         case    load_standard:
  1441.                 loadSettings(obj,maindata,"ENV:TinyMeter");
  1442.                 insertSettings(maindata->set,maindata->list);
  1443.                 break;
  1444.         case    load_file:
  1445.                 if(file=getfilename(obj,GetStr(MM_OpenTitle),"#?.tm",FALSE))
  1446.                 {
  1447.                     loadSettings(obj,maindata,file);
  1448.                     insertSettings(maindata->set,maindata->list);
  1449.                 }
  1450.                 break;
  1451.     }
  1452.     return((ULONG)DoSuperMethodA(cl,obj,msg));
  1453. }
  1454.  
  1455. ///
  1456. /******************************************/
  1457. /* test settings and window snapping      */
  1458. /******************************************/
  1459. ///
  1460.  
  1461. #include <exec/memory.h>
  1462. #include <exec/ports.h>
  1463. #include <exec/execbase.h>
  1464.  
  1465. #define test_test       0
  1466. #define test_getwin     1
  1467.  
  1468. struct TestMessage
  1469. {
  1470.     struct  Message ts_Message;
  1471.  
  1472.     ULONG   MethodID;
  1473.  
  1474.     struct  tm_sys_set  *set;
  1475.     struct  tm_gau_set  *list;
  1476.  
  1477.     ULONG   posx,
  1478.             posy,
  1479.             sizx;
  1480. };
  1481.  
  1482. struct TestMessage  *ts_msg;
  1483. struct MsgPort      *p_port;
  1484. struct MsgPort      *p_reply;
  1485.  
  1486. BOOL SafePutToPort(struct Message *message, char *portname)
  1487. {
  1488.     struct MsgPort *port;
  1489.  
  1490.     Forbid();
  1491.     port = (struct MsgPort *)FindPort(portname);
  1492.     if (port) PutMsg(port, (struct Message *) message);
  1493.     Permit();
  1494.     return(port ? TRUE : FALSE);
  1495. }
  1496.  
  1497. ULONG InitTestSettings()
  1498. {
  1499.     if(
  1500.        ( ts_msg =(struct TestMessage *)AllocMem  (sizeof(struct TestMessage),MEMF_PUBLIC|MEMF_CLEAR)) &&
  1501.        ( p_reply=(struct MsgPort *)    CreatePort(0,0))
  1502.       )  return (1L);
  1503.     else return (0L);
  1504. }
  1505.  
  1506. FreeTestSettings()
  1507. {
  1508.     if(ts_msg) FreeMem      (ts_msg,sizeof(struct TestMessage));
  1509.     if(p_reply)DeletePort   (p_reply);
  1510. }
  1511.  
  1512. struct TestMessage *TestSettings(ULONG type)
  1513. {
  1514.     ULONG  i,j;
  1515.     struct tm_gau_set   *act,
  1516.                         *all[64];
  1517.     if( FindPort("TinyMeter") )
  1518.     if( ts_msg && p_reply)
  1519.     {
  1520.         ts_msg->ts_Message.mn_Node.ln_Type  = NT_MESSAGE;
  1521.         ts_msg->ts_Message.mn_ReplyPort     = p_reply;
  1522.         ts_msg->ts_Message.mn_Length        = sizeof ( struct TestMessage );
  1523.         ts_msg->MethodID                    = type;
  1524.         switch (type)
  1525.         {
  1526.             case    test_test:
  1527.                     for(i=0;i<64;i++)all[i]=0L;
  1528.                     for(i=0;;i++)
  1529.                     {
  1530.                         DoMethod(visible,MUIM_List_GetEntry,i,&act);
  1531.                         if(!act)  break;
  1532.                         if(i==63) break;
  1533.                         if(all[i]=AllocVec(sizeof(struct tm_gau_set),0L))
  1534.                         {
  1535.                             CopyMem(act, all[i], sizeof(struct tm_gau_set));
  1536.                         }
  1537.                         else return(0L);
  1538.                     }
  1539.                     for(j=0;j<i;j++)
  1540.                     {
  1541.                         all[j]->next=all[j+1];
  1542.                     }
  1543.                     ts_msg->list=all[0];
  1544.  
  1545.                     if(ts_msg->set = AllocVec(sizeof(struct tm_sys_set),0L))
  1546.                     {
  1547.                         CopyMem(maindata->set,ts_msg->set,sizeof(struct tm_sys_set));
  1548.                     }
  1549.                     else return(0L);
  1550.                     break;
  1551.             case    test_getwin:
  1552.                     ts_msg->list=0L;
  1553.                     ts_msg->set =0L;
  1554.                     break;
  1555.         }
  1556.         if (SafePutToPort((struct Message *)ts_msg,"TinyMeter"))
  1557.         {
  1558.             WaitPort(p_reply);
  1559.             return(GetMsg(p_reply));
  1560.         }
  1561.     }
  1562.     return(0L);
  1563. }
  1564.  
  1565. ///
  1566. /******************************************/
  1567. /* snapWindow method                      */
  1568. /******************************************/
  1569. ///
  1570. snapWindow(struct IClass *cl,Object *obj, struct Msg *msg)
  1571. {
  1572.     struct TestMessage *testMsg;
  1573.  
  1574.     testMsg=TestSettings(test_getwin);
  1575.  
  1576.     set(IN_posx,    MUIA_String_Integer     ,testMsg->posx);
  1577.     set(IN_posy,    MUIA_String_Integer     ,testMsg->posy);
  1578.     set(IN_sizx,    MUIA_String_Integer     ,testMsg->sizx);
  1579. }
  1580. ///
  1581. /******************************************/
  1582. /* save settings and the method for it    */
  1583. /******************************************/
  1584. ///
  1585. #define save_save      0
  1586. #define save_use       1
  1587. #define save_test      2
  1588. #define save_file      3
  1589. #define save_cancel    4
  1590.  
  1591. struct SaveSetMsg
  1592. {
  1593.     ULONG           MethodID;
  1594.     ULONG           what;
  1595. };
  1596.  
  1597. getSettings(struct tm_sys_set *set)
  1598. {
  1599.     ULONG   dummy;
  1600.     struct  ls_layout *src;
  1601.  
  1602.     get(NB_col  ,MUIA_Numeric_Value,&dummy);set->colums         =(UWORD)dummy;
  1603.     get(NB_bordx,MUIA_Numeric_Value,&dummy);set->win_border_x   =(UWORD)dummy;
  1604.     get(NB_bordy,MUIA_Numeric_Value,&dummy);set->win_border_y   =(UWORD)dummy;
  1605.     get(NB_spcx ,MUIA_Numeric_Value,&dummy);set->win_space_x    =(UWORD)dummy;
  1606.     get(NB_spcy ,MUIA_Numeric_Value,&dummy);set->win_space_y    =(UWORD)dummy;
  1607.     get(NB_wait ,MUIA_Numeric_Value,&dummy);set->start_wait     =(UWORD)dummy;
  1608.     get(NB_mem  ,MUIA_Numeric_Value,&dummy);set->mem_refresh    =(UWORD)dummy;
  1609.     get(NB_vol  ,MUIA_Numeric_Value,&dummy);set->vol_refresh    =(UWORD)dummy;
  1610.  
  1611.     DoMethod(ls_Switch,MUIM_List_GetEntry,1,&src); set->bg_type              =src->entry_selected;
  1612.     DoMethod(ls_Switch,MUIM_List_GetEntry,2,&src); set->win_backfront        =src->entry_selected;
  1613.     DoMethod(ls_Switch,MUIM_List_GetEntry,3,&src); set->win_move             =src->entry_selected;
  1614.     DoMethod(ls_Switch,MUIM_List_GetEntry,4,&src); set->bd_type              =src->entry_selected;
  1615.     DoMethod(ls_Switch,MUIM_List_GetEntry,6,&src); set->start_usescreennotify=src->entry_selected;
  1616.     DoMethod(ls_Switch,MUIM_List_GetEntry,7,&src); set->Executive            =src->entry_selected;
  1617.  
  1618.     getColor(&set->bg_color,    MN_Colors[0]);
  1619.     getColor(&set->bright_color,MN_Colors[1]);
  1620.     getColor(&set->dark_color,  MN_Colors[2]);
  1621.  
  1622.     get(ST_PubScr ,MUIA_String_Contents,&dummy); strcpy(&set->pub_name[0]   ,(char *)dummy);
  1623.     get(ST_bg     ,MUIA_String_Contents,&dummy); strcpy(&set->bg_picture[0] ,(char *)dummy);
  1624.     get(IN_sizx   ,MUIA_String_Integer, &dummy); set->x_siz=(UWORD)dummy;
  1625.     get(IN_posx   ,MUIA_String_Integer, &dummy); set->x_pos=(UWORD)dummy;
  1626.     get(IN_posy   ,MUIA_String_Integer, &dummy); set->y_pos=(UWORD)dummy;
  1627. }
  1628.  
  1629. static saveSettings(Object *listv, struct tm_sys_set *set, char *file)
  1630. {
  1631.     int                 i;
  1632.     ULONG               my_file;
  1633.     struct tm_gau_set   *act;
  1634.  
  1635.     if(my_file=(ULONG)Open(file,MODE_NEWFILE))
  1636.     {
  1637.         Write(my_file,set,(ULONG)sizeof(struct tm_sys_set));
  1638.         for (i=0;;i++)
  1639.         {
  1640.             DoMethod(listv,MUIM_List_GetEntry,i,&act);
  1641.             if(!act)  break;
  1642.             if(i==63) break;
  1643.             Write(my_file,act,(ULONG)sizeof(struct tm_gau_set));
  1644.         }
  1645.         Close(my_file);
  1646.     }
  1647. }
  1648.  
  1649. ULONG saveManager(struct IClass *cl,Object *obj, struct SaveSetMsg *msg)
  1650. {
  1651.     int i=0;
  1652.     char *file;
  1653.  
  1654.     getSettings(maindata->set);
  1655.     switch (msg->what)
  1656.     {
  1657.         case    save_save:
  1658.                 saveSettings(visible,maindata->set,"ENVARC:TinyMeter");
  1659.         case    save_use:
  1660.                 saveSettings(visible,maindata->set,"ENV:TinyMeter");
  1661.                 TestSettings(test_test);
  1662.                 while(pubscr[i]) FreeVec(pubscr[i++]);
  1663.                 DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  1664.                 return(0L);
  1665.         case    save_test:
  1666.                 TestSettings(test_test);
  1667.                 return(obj);
  1668.         case    save_file:
  1669.                 if(file=getfilename(obj,GetStr(MM_SaveTitle),"#?.tm",TRUE))
  1670.                     saveSettings(visible,maindata->set,file);
  1671.                 break;
  1672.         case    save_cancel:
  1673.                 loadSettings(obj,maindata,"ENV:TinyMeter");
  1674.                 insertSettings(maindata->set,maindata->list);
  1675.                 TestSettings(test_test);
  1676.                 DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  1677.                 break;
  1678.     }
  1679.     return((ULONG)DoSuperMethodA(cl,obj,msg));
  1680. }
  1681. ///
  1682. /******************************************/
  1683. /* other MainWindow methods               */
  1684. /******************************************/
  1685. ///
  1686. struct DoubleClkMsg
  1687. {
  1688.     ULONG   MethodID;
  1689.     struct  MainData *data;
  1690. };
  1691.  
  1692. static ULONG Dis_DoubleClick2(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  1693. {
  1694.     struct ls_layout *src;
  1695.  
  1696.     DoMethod(ls_Switch,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&src);
  1697.     if(src)
  1698.     {
  1699.         if(src->entry_max>0)
  1700.         {
  1701.             src->entry_selected++;if(src->entry_max<src->entry_selected)src->entry_selected=0;
  1702.             DoMethod(ls_Switch,MUIM_List_Redraw,MUIV_List_Redraw_Active);
  1703.         }
  1704.         return(DoSuperMethodA(cl,obj,msg));
  1705.     }
  1706.     else return(0L);
  1707. }
  1708.  
  1709. static ULONG Dis_DoubleClick1(struct IClass *cl,Object *obj, struct DoubleClkMsg *msg)
  1710. {
  1711.     char   *my_ptr;
  1712.  
  1713.     DoMethod(ls_PubScr,MUIM_List_GetEntry,MUIV_List_GetEntry_Active,&my_ptr);
  1714.     if(my_ptr)
  1715.     {
  1716.         set(ST_PubScr,MUIA_String_Contents,my_ptr);
  1717.         DoMethod(PO_PubScr,MUIM_Popstring_Close,0L);
  1718.         return(DoSuperMethodA(cl,obj,msg));
  1719.     }
  1720.     else return(0L);
  1721. }
  1722.  
  1723. ULONG MainWindow_Finish(struct IClass *cl,Object *obj,Msg *msg)
  1724. {
  1725.     int i=0;
  1726.  
  1727.     struct MainData *data;
  1728.     data=INST_DATA(cl,obj);
  1729.     while(pubscr[i++]) FreeVec(pubscr[i]); pubscr[i]=0;
  1730.     DoMethod((Object *)xget(obj,MUIA_ApplicationObject),MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  1731.  
  1732.     return((ULONG)0L);
  1733. }
  1734.  
  1735. static GetPubScreens()
  1736. {
  1737.     struct List     *PubScreenList;
  1738.     struct PubScreenNode *ScreenNode;
  1739.     int i=0;
  1740.  
  1741.     PubScreenList = LockPubScreenList();
  1742.     for(ScreenNode=(struct PubScreenNode *)PubScreenList->lh_Head;ScreenNode->psn_Node.ln_Succ;ScreenNode=(struct PubScreenNode *)ScreenNode->psn_Node.ln_Succ)
  1743.     {
  1744.         pubscr[i]=(char *)AllocVec(256L,0L);
  1745.         strcpy(pubscr[i],ScreenNode->psn_Node.ln_Name);
  1746.         i++;
  1747.     }
  1748.     UnlockPubScreenList();
  1749. }
  1750.  
  1751. static ULONG MainWindow_New(struct IClass *cl,Object *obj,Msg *msg)
  1752. {
  1753.     struct MainData *data;
  1754.     int    i;
  1755.  
  1756.     InitBitMap(&my_bmp,3,41,192);
  1757.     my_bmp.Planes[0]=&tmp_logoData[0];
  1758.     my_bmp.Planes[1]=&tmp_logoData[576];
  1759.     my_bmp.Planes[2]=&tmp_logoData[1152];
  1760.  
  1761.     GetPubScreens();
  1762.  
  1763.     if (obj = (Object *)
  1764.         DoSuperNew(cl,obj,
  1765.             MUIA_Window_Title, GetStr(MO_Title),
  1766.             MUIA_Window_ID   , MAKE_ID('T','I','N','Y'),
  1767.             WindowContents, VGroup, ButtonFrame,
  1768.                 Child, HGroup,
  1769.                     Child, VGroup, MUIA_Background, MUII_SHADOW,
  1770.                         Child, HVSpace,
  1771.                         Child, BitmapObject,
  1772.                             MUIA_Bitmap_Bitmap,         &my_bmp,
  1773.                             MUIA_Bitmap_Width,          41,
  1774.                             MUIA_Bitmap_Height,         192,
  1775.                             MUIA_Bitmap_SourceColors,   &tmp_logoPaletteRGB32[1],
  1776.                             MUIA_FixHeight, 192,
  1777.                             MUIA_FixWidth, 41,
  1778.                             MUIA_ShortHelp, "Greets to: hANGKOK, pEPE, bEZZZERK, tRACER, rALPH...",
  1779.                         End,
  1780.                     End,
  1781.                     Child, RegisterGroup(mainlister),
  1782.                         MUIA_Register_Frame, TRUE,
  1783.  
  1784.                         Child, HGroup,
  1785.                             Child, lv_Switch=(Object *)ListviewObject,
  1786.                                 MUIA_Frame, MUIV_Frame_InputList,
  1787.                                 MUIA_Listview_Input, TRUE,
  1788.                                 MUIA_Listview_DoubleClick, TRUE,
  1789.                                 MUIA_Listview_List, ls_Switch=(Object *)ListObject,
  1790.                                     MUIA_List_ConstructHook, &lay_ConstructHook,
  1791.                                     MUIA_List_DestructHook , &lay_DestructHook,
  1792.                                     MUIA_List_DisplayHook  , &lay_DisplayHook,
  1793.                                     MUIA_List_Format       , "MIW=50 MAW=100 BAR,",
  1794.                                     MUIA_List_Active, MUIV_List_Active_Top,
  1795.                                 End,
  1796.                             End,
  1797.  
  1798.                             Child, RegisterGroup(sublister),
  1799.                                 MUIA_Register_Frame, TRUE,
  1800.  
  1801.                                 Child, ColGroup(2),
  1802.                                     Child, HVSpace,
  1803.                                     Child, HVSpace,
  1804.  
  1805.                                     Child, Label(GetStr(MO_MemRefresh)),
  1806.                                     Child, ColGroup(2), Child, NB_mem=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  1807.                                     Child, Label(GetStr(MO_VolRefresh)),
  1808.                                     Child, ColGroup(2), Child, NB_vol=MUI_MakeObject(MUIO_NumericButton,NULL,1,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  1809.                                     Child, Label(GetStr(MO_Wait)),
  1810.                                     Child, ColGroup(2), Child, NB_wait=MUI_MakeObject(MUIO_NumericButton,NULL,0,100,GetStr(MO_fmt_seconds)), Child, HVSpace, End,
  1811.  
  1812.                                     Child, HVSpace,
  1813.                                     Child, HVSpace,
  1814.                                 End,
  1815.                                 Child, ColGroup(2),
  1816.                                     Child, HVSpace,
  1817.                                     Child, HVSpace,
  1818.  
  1819.                                     Child, Label(GetStr(MO_Public)),
  1820.                                     Child, PO_PubScr=(Object *)PopobjectObject,
  1821.                                         MUIA_Popstring_String, ST_PubScr=(Object *)String(NULL,80),
  1822.                                         MUIA_Popstring_Button, PopButton(MUII_PopUp),
  1823.                                         MUIA_Popobject_Object, lv_PubScr=(Object *)ListviewObject,
  1824.                                             MUIA_Frame, MUIV_Frame_InputList,
  1825.                                             MUIA_Listview_Input, TRUE,
  1826.                                             MUIA_Listview_DoubleClick, TRUE,
  1827.                                             MUIA_Listview_List, ls_PubScr=(Object *)ListObject,
  1828.                                                 MUIA_List_Active, MUIV_List_Active_Top,
  1829.                                                 MUIA_List_SourceArray,&pubscr[0],
  1830.                                             End,
  1831.                                         End,
  1832.                                     End,
  1833.  
  1834.                                     Child, Label(GetStr(MO_WindowPos)),
  1835.                                     Child, ColGroup(2),
  1836.                                         Child, IN_posx=StringObject,
  1837.                                             StringFrame,
  1838.                                             MUIA_String_Accept , "0123456879",
  1839.                                         End,
  1840.                                         Child, IN_posy=StringObject,
  1841.                                             StringFrame,
  1842.                                             MUIA_String_Accept , "0123456879",
  1843.                                         End,
  1844.                                     End,
  1845.  
  1846.                                     Child, Label(GetStr(MO_WindowSiz)),
  1847.                                     Child, ColGroup(2),
  1848.                                         MUIA_Group_SameWidth, TRUE,
  1849.                                         Child, IN_sizx=StringObject,
  1850.                                             StringFrame,
  1851.                                             MUIA_String_Accept , "0123456879",
  1852.                                         End,
  1853.                                         Child, BT_Snap=SimpleButton(GetStr(MO_Snap)),
  1854.                                     End,
  1855.  
  1856.                                     Child, Label(GetStr(MO_BackgroundPic)),
  1857.                                     Child, ST_bg=PopaslObject,
  1858.                                         MUIA_Popstring_String, String(NULL,80),
  1859.                                         MUIA_Popstring_Button, PopButton(MUII_PopFile),
  1860.                                         ASLFO_TitleText  , GetStr(MO_SelectBg),
  1861.                                     End,
  1862.                                     Child, Label(GetStr(MO_BackgroundCol)),
  1863.                                     Child, ColGroup(3),Child, HVSpace, Child, MN_Colors[0]=MakePen(), Child, HVSpace, End,
  1864.                                     Child, Label(GetStr(MO_BrightCol)),
  1865.                                     Child, ColGroup(3),Child, HVSpace, Child, MN_Colors[1]=MakePen(), Child, HVSpace, End,
  1866.                                     Child, Label(GetStr(MO_DarkCol)),
  1867.                                     Child, ColGroup(3),Child, HVSpace, Child, MN_Colors[2]=MakePen(), Child, HVSpace, End,
  1868.  
  1869.                                     Child, HVSpace,
  1870.                                     Child, HVSpace,
  1871.                                 End,
  1872.                                 Child, VGroup,
  1873.                                     Child, HVSpace,
  1874.  
  1875.                                     Child, ColGroup(2),
  1876.                                         Child, Label(GetStr(MO_Colums)),
  1877.                                         Child, ColGroup(2), Child, NB_col=MUI_MakeObject(MUIO_NumericButton,NULL,1,32,"%3ld"), Child, HVSpace, End,
  1878.                                         Child, Label(GetStr(MO_SpaceX)),
  1879.                                         Child, ColGroup(2), Child, NB_spcx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1880.                                         Child, Label(GetStr(MO_SpaceY)),
  1881.                                         Child, ColGroup(2), Child, NB_spcy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1882.                                         Child, Label(GetStr(MO_BordX)),
  1883.                                         Child, ColGroup(2), Child, NB_bordx=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1884.                                         Child, Label(GetStr(MO_BordY)),
  1885.                                         Child, ColGroup(2), Child, NB_bordy=MUI_MakeObject(MUIO_NumericButton,NULL,0,256,GetStr(MO_fmt_pixels)), Child, HVSpace, End,
  1886.                                     End,
  1887.                                     Child, HVSpace,
  1888.                                 End,
  1889.                             End,
  1890.                         End,
  1891.  
  1892.                         Child, VGroup,
  1893.                             Child, NewObject(CL_ChooseFields->mcc_Class,NULL,TAG_DONE),
  1894.                         End,
  1895.                     End,
  1896.                 End,
  1897.                 Child, HGroup,
  1898.                     Child, BT_Save = (Object *)SimpleButton(GetStr(MO_Save)),
  1899.                     Child, BT_Use = (Object *)SimpleButton(GetStr(MO_Use)),
  1900.                     Child, BT_Test = (Object *)SimpleButton(GetStr(MO_Test)),
  1901.                     Child, BT_Cancel = (Object *)SimpleButton(GetStr(MO_Cancel)),
  1902.                 End,
  1903.             End,
  1904.         End)
  1905.     {
  1906.         data=INST_DATA(cl,obj);
  1907.  
  1908.         set(BT_Save     ,MUIA_ShortHelp,GetStr(MH_Save));
  1909.         set(BT_Use      ,MUIA_ShortHelp,GetStr(MH_Use));
  1910.         set(BT_Test     ,MUIA_ShortHelp,GetStr(MH_Test));
  1911.         set(BT_Cancel   ,MUIA_ShortHelp,GetStr(MH_Cancel));
  1912.         set(NB_mem      ,MUIA_ShortHelp,GetStr(MH_MemRefresh));
  1913.         set(NB_vol      ,MUIA_ShortHelp,GetStr(MH_VolRefresh));
  1914.         set(NB_wait     ,MUIA_ShortHelp,GetStr(MH_Wait));
  1915.         set(lv_Switch   ,MUIA_ShortHelp,GetStr(MH_Flags));
  1916.         set(PO_PubScr   ,MUIA_ShortHelp,GetStr(MH_Public));
  1917.         set(IN_posx     ,MUIA_ShortHelp,GetStr(MH_PosX));
  1918.         set(IN_posy     ,MUIA_ShortHelp,GetStr(MH_PosY));
  1919.         set(IN_sizx     ,MUIA_ShortHelp,GetStr(MH_SizX));
  1920.         set(BT_Snap     ,MUIA_ShortHelp,GetStr(MH_Snap));
  1921.         set(ST_bg       ,MUIA_ShortHelp,GetStr(MH_BackgroundPic));
  1922.         set(MN_Colors[0],MUIA_ShortHelp,GetStr(MH_BackgroundCol));
  1923.         set(MN_Colors[1],MUIA_ShortHelp,GetStr(MH_BrightCol));
  1924.         set(MN_Colors[2],MUIA_ShortHelp,GetStr(MH_DarkCol));
  1925.         set(NB_col      ,MUIA_ShortHelp,GetStr(MH_Colums));
  1926.         set(NB_spcx     ,MUIA_ShortHelp,GetStr(MH_SpaceX));
  1927.         set(NB_spcy     ,MUIA_ShortHelp,GetStr(MH_SpaceX));
  1928.         set(NB_bordx    ,MUIA_ShortHelp,GetStr(MH_BordX));
  1929.         set(NB_bordy    ,MUIA_ShortHelp,GetStr(MH_BordY));
  1930.  
  1931.         DoMethod(BT_Snap  ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,1,Dis_ID_Snap);
  1932.         DoMethod(BT_Save  ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_save);
  1933.         DoMethod(BT_Use   ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_use );
  1934.         DoMethod(BT_Test  ,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_test);
  1935.         DoMethod(lv_PubScr,MUIM_Notify,MUIA_Listview_DoubleClick   ,TRUE ,obj,2,Dis_ID_DoubleClick1,data);
  1936.         DoMethod(lv_Switch,MUIM_Notify,MUIA_Listview_DoubleClick   ,TRUE ,obj,1,Dis_ID_DoubleClick2);
  1937.  
  1938.         DoMethod(obj,MUIM_Notify,MUIA_Window_MenuAction,MEN_SAVE,obj,2,Dis_ID_Save,save_file);
  1939.         DoMethod(obj,MUIM_Notify,MUIA_Window_MenuAction,MEN_OPEN,obj,2,Dis_ID_Load,load_file);
  1940.  
  1941.         DoMethod(BT_Cancel,MUIM_Notify,MUIA_Pressed                ,FALSE,obj,2,Dis_ID_Save        ,save_cancel);
  1942.  
  1943.         for(i=0;i<8;i++)DoMethod(ls_Switch,MUIM_List_InsertSingle,&switches[i],MUIV_List_Insert_Bottom);
  1944.  
  1945.         DoMethod(obj,Dis_ID_Load,load_standard);
  1946.  
  1947.     }
  1948.     return((ULONG)obj);
  1949. }
  1950. ///
  1951.  
  1952. static __saveds __asm ULONG MainWindowDispatcher(__a0 struct IClass *cl,__a2 Object *obj,__a1 Msg msg)
  1953. {
  1954.     switch (msg->MethodID)
  1955.     {
  1956.             case OM_NEW              : return (MainWindow_New    (cl,obj,(APTR)msg));
  1957.             case Dis_ID_Finish       : return (MainWindow_Finish (cl,obj,(APTR)msg));
  1958.             case Dis_ID_DoubleClick1 : return (Dis_DoubleClick1  (cl,obj,(APTR)msg));
  1959.             case Dis_ID_DoubleClick2 : return (Dis_DoubleClick2  (cl,obj,(APTR)msg));
  1960.             case Dis_ID_Save         : return (saveManager       (cl,obj,(APTR)msg));
  1961.             case Dis_ID_Snap         : return (snapWindow        (cl,obj,(APTR)msg));
  1962.             case Dis_ID_Load         : return (loadManager       (cl,obj,(APTR)msg));
  1963.     }
  1964.     return (DoSuperMethodA    (cl,obj,(APTR)msg));
  1965. }
  1966.  
  1967. /*************************************************/
  1968. /* Init all classes                              */
  1969. /*************************************************/
  1970. ///
  1971. VOID ExitClasses(VOID)
  1972. {
  1973.         if (CL_FieldsList  ) MUI_DeleteCustomClass(CL_FieldsList);
  1974.         if (CL_ChooseFields) MUI_DeleteCustomClass(CL_ChooseFields);
  1975.         if (CL_MainWindow)   MUI_DeleteCustomClass(CL_MainWindow);
  1976.         if (CL_Composer)     MUI_DeleteCustomClass(CL_Composer);
  1977. }
  1978.  
  1979.  
  1980. BOOL InitClasses(VOID)
  1981. {
  1982.         CL_MainWindow    = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct MainData)           ,MainWindowDispatcher);
  1983.         CL_FieldsList    = MUI_CreateCustomClass(NULL,MUIC_List     ,NULL, sizeof(struct FieldsList_Data)    ,FieldsList_Dispatcher);
  1984.         CL_ChooseFields  = MUI_CreateCustomClass(NULL,MUIC_Group    ,NULL, sizeof(struct ChooseFields_Data)  ,ChooseFields_Dispatcher);
  1985.         CL_Composer      = MUI_CreateCustomClass(NULL,MUIC_Window   ,NULL, sizeof(struct Composer_Data)      ,ComposerDispatcher);
  1986.         if ( CL_FieldsList && CL_ChooseFields && CL_MainWindow && CL_Composer ) return(TRUE);
  1987.         ExitClasses();
  1988.         return(FALSE);
  1989. }
  1990. ///
  1991. /*************************************************/
  1992. /* Main: MUIApplication and Aboutwindow          */
  1993. /*************************************************/
  1994. ///
  1995.  
  1996. #include <exec/tasks.h>
  1997.  
  1998. #ifdef _DCC
  1999.  
  2000. int brkfunc(void) { return(0); }
  2001.  
  2002.  
  2003. #endif
  2004.  
  2005. void LocalizeSwitches(struct ls_layout *ll)
  2006. {
  2007.     int i;
  2008.     for (;ll->entry_desc!=NULL;ll++)
  2009.     {
  2010.         ll->entry_desc=GetStr((int)ll->entry_desc);
  2011.         for(i=0;i<6;i++)
  2012.         {
  2013.             if (ll->entry[i]!=NULL) ll->entry[i]=GetStr((int)ll->entry[i]);
  2014.             else ll->entry[i]=" ";
  2015.         }
  2016.     }
  2017. }
  2018.  
  2019. BOOL    quit_not;
  2020.  
  2021. int main(int argc, char *argv[])
  2022. {
  2023.     Object *app,*window;
  2024.     struct  Task    *me;
  2025.  
  2026.     if (MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))
  2027.     {
  2028.         if(me= FindTask(NULL))
  2029.         {
  2030.             if((me->tc_SPUpper-me->tc_SPLower)>8000)
  2031.             {
  2032.                 if(maindata=(struct tm_data *)AllocVec(sizeof(struct tm_data),MEMF_CLEAR))
  2033.                 {
  2034.                     if(InitTestSettings())
  2035.                     {
  2036.                         InitClasses();
  2037.                         InitLocale();
  2038.                         LocalizeNewMenu(MenuData1);
  2039.                         LocalizeNewMenu(CmpMenuData);
  2040.                         LocalizeSwitches(switches);
  2041.                         LocalizeStringArray(gau_types);
  2042.                         LocalizeStringArray(types);
  2043.                         LocalizeStringArray(indent);
  2044.                         LocalizeStringArray(mainlister);
  2045.                         LocalizeStringArray(sublister);
  2046.                         LocalizeStringArray(regcomposer);
  2047.                         strcpy(&default_gauge.label[0],GetStr(MDef_Label));
  2048.                         strcpy(&default_gauge.format[0],GetStr(MDef_fmt));
  2049.                         strcpy(&default_gauge.expansion[0],GetStr(MDef_Device));
  2050.  
  2051.                         app = ApplicationObject,
  2052.                                 MUIA_Application_Title      ,   "TinyMeterPrefs V4.01",
  2053.                                 MUIA_Application_Version    ,   "$VER: TinyMeterPrefs V4.01 (22.11.95)",
  2054.                                 MUIA_Application_Copyright  ,   "©1994-95, Tinic Urou",
  2055.                                 MUIA_Application_Author     ,   "Tinic Urou",
  2056.                                 MUIA_Application_Description,   GetStr(MA_Description),
  2057.                                 MUIA_Application_Base       ,   "TMPREFS",
  2058.                                 MUIA_Application_Menustrip  ,   MN_Main = MUI_MakeObject(MUIO_MenustripNM,MenuData1,0),
  2059.                                 SubWindow                   ,   window = (Object *)NewObject(CL_MainWindow->mcc_Class,NULL,TAG_DONE),
  2060.                                 SubWindow                   ,   WI_About = WindowObject,
  2061.                                                                     MUIA_Window_Title, GetStr(MA_About_Title),
  2062.                                                                     MUIA_Window_ID   , MAKE_ID('T','M','A','B'),
  2063.                                                                     WindowContents, VGroup, ButtonFrame,
  2064.                                                                         Child, BodychunkObject,
  2065.                                                                             MUIA_FixWidth             , ABOUT_WIDTH ,
  2066.                                                                             MUIA_FixHeight            , ABOUT_HEIGHT,
  2067.                                                                             MUIA_Bitmap_Width         , ABOUT_WIDTH ,
  2068.                                                                             MUIA_Bitmap_Height        , ABOUT_HEIGHT,
  2069.                                                                             MUIA_Bodychunk_Depth      , ABOUT_DEPTH ,
  2070.                                                                             MUIA_Bodychunk_Body       , (UBYTE *)about_body,
  2071.                                                                             MUIA_Bodychunk_Compression, ABOUT_COMPRESSION,
  2072.                                                                             MUIA_Bodychunk_Masking    , ABOUT_MASKING,
  2073.                                                                             MUIA_Bitmap_SourceColors  , (ULONG *)about_colors,
  2074.                                                                             MUIA_Bitmap_Transparent   , 0,
  2075.                                                                         End,
  2076.                                                                     End,
  2077.                                                                 End,
  2078.                                 SubWindow                   ,   WI_HelpFmt = WindowObject,
  2079.                                                                     MUIA_Window_Title, GetStr(MH_FormatHelp),
  2080.                                                                     MUIA_Window_ID  , MAKE_ID('T','H','L','P'),
  2081.                                                                     WindowContents, VGroup,
  2082.                                                                         Child, ScrollgroupObject,
  2083.                                                                             MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
  2084.                                                                                 Child, TextObject,
  2085.                                                                                     MUIA_Text_Contents, GetStr(MOH_Format),
  2086.                                                                                 End,
  2087.                                                                             End,
  2088.                                                                         End,
  2089.                                                                     End,
  2090.                                                                 End,
  2091.                                 SubWindow                   ,   WI_HelpClock = WindowObject,
  2092.                                                                     MUIA_Window_Title, GetStr(MH_ClockHelp),
  2093.                                                                     MUIA_Window_ID  , MAKE_ID('T','H','L','P'),
  2094.                                                                     WindowContents, VGroup,
  2095.                                                                         Child, ScrollgroupObject,
  2096.                                                                             MUIA_Scrollgroup_Contents, VirtgroupObject,TextFrame,
  2097.                                                                                 Child, TextObject,
  2098.                                                                                     MUIA_Text_Contents, GetStr(MOH_Clock),
  2099.                                                                                 End,
  2100.                                                                             End,
  2101.                                                                         End,
  2102.                                                                     End,
  2103.                                                                 End,
  2104.                               End;
  2105.  
  2106.                         if(app)
  2107.                         {
  2108.                             DoMethod(app        ,MUIM_Notify,MUIA_Application_MenuAction,MEN_QUIT ,app     ,2,MUIM_Application_ReturnID ,MUIV_Application_ReturnID_Quit);
  2109.                             DoMethod(app        ,MUIM_Notify,MUIA_Application_MenuAction,MEN_ABOUT,WI_About,3,MUIM_Set                  ,MUIA_Window_Open,TRUE);
  2110.                             DoMethod(WI_About   ,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_About,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2111.                             DoMethod(WI_HelpFmt ,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_HelpFmt,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2112.                             DoMethod(WI_HelpClock,MUIM_Notify,MUIA_Window_CloseRequest   ,TRUE     ,WI_HelpClock,3,MUIM_Set                  ,MUIA_Window_Open,FALSE);
  2113.  
  2114.  
  2115.                             DoMethod(window,MUIM_Notify,MUIA_Window_CloseRequest,TRUE, app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  2116.                             set(window,MUIA_Window_Open,TRUE);
  2117.                             {
  2118.                                 ULONG sigs = 0;
  2119.                                 while (DoMethod(app,MUIM_Application_NewInput,&sigs) != MUIV_Application_ReturnID_Quit)
  2120.                                 {
  2121.                                     if (sigs)
  2122.                                     {
  2123.                                             sigs = Wait(sigs | SIGBREAKF_CTRL_C);
  2124.                                             if (sigs & SIGBREAKF_CTRL_C) break;
  2125.                                     }
  2126.                                 }
  2127.                             }                   
  2128.                             MUI_DisposeObject(app);
  2129.                         }
  2130.                         ExitLocale();
  2131.  
  2132.                         ExitClasses();
  2133.                         FreeTestSettings();
  2134.                     }
  2135.                     if(maindata->set)FreeVec(maindata->set);
  2136.                     FreeVec(maindata);
  2137.                 }
  2138.             }
  2139.             else MUI_RequestA(NULL,NULL,0,"Early Startup","OK","Stacksize too small!\n\nA minimum of 8192 bytes is needed.",NULL);
  2140.         }
  2141.         CloseLibrary(MUIMasterBase);
  2142.     }
  2143.     quit_not=FALSE;
  2144. }
  2145.  
  2146. int wbmain(struct WBStartup *wb_startup)
  2147. {
  2148.         return (main(0, (char **)wb_startup));
  2149. }
  2150.  
  2151. ///
  2152.